# -*- coding:utf-8 -*-

from app.features.enum.edata_type import EDataType
from app.features.enum.etable_string_key_type import ETableStringKeyType
from app.features.enum.etable_string_value_type import ETableStringValueType

class DataInIndexDefine:
    # 数据类型
    dataType = EDataType.Invalid.value
    # 数据所在数据组的索引位置
    dataIndex = 0

    def __init__(self) -> None:
        self.dataType = EDataType.Invalid.value
        self.dataIndex = 0 

# tableString代表的table中对key的定义描述
class TableStringKeyDefine:
    # key的类型
    keyType = ETableStringKeyType.Seq.value 
    # 如果key为DATA_IN_INDEX类型,存储其定义
    dataInIndexDefine:DataInIndexDefine

    def __init__(self) -> None:
        self.keyType = ETableStringKeyType.Seq.value 
        self.dataInIndexDefine = DataInIndexDefine()

# tableString代表的table中对value的定义描述
class TableStringValueDefine:
    # value的类型
    ValueType : ETableStringValueType.AllTrue.value
    # 如果value为DATA_IN_INDEX类型,存储其定义
    DataInIndexDefine:DataInIndexDefine
    # 如果value为TABLE类型,则需要存储table中每个元素的定义
    TableValueDefineList = []

# 形如type=#1(int)这样对table型value中一个键值对的定义
class TableElementDefine:
    keyName : str
    dataInIndexDefine:DataInIndexDefine

# 将tableString定义的字符串转为的格式定义
class TableStringFormatDefine:
    keyDefine:TableStringKeyDefine
    valueDefine:TableStringValueDefine

    def __init__(self) -> None:
        self.keyDefine = TableStringKeyDefine()
        self.valueDefine = TableStringValueDefine()

#mapString类型的配置信息
class MapStringInfo:
    #参数配置信息(key:参数变量名, value:此参数的配置信息)
    paramInfo = {}

# excel中单个字段(列)的描述
class FieldInfo:
    #该字段所在表格
    tableName = ''
    #字段名
    fieldName = ''
    # 字段数据类型
    dataType = EDataType.Invalid.value
    # 声明字段数据类型的字符串
    dataTypeString = ''
    # array类型的子元素的数据类型
    arrayChildDataType = EDataType.Invalid.value
    # array类型的子元素的数据类型字符串
    arrayChildDataTypeString = ''
    # 字段描述
    desc = ''
    # 声明字段检查规则的字符串
    checkRule = ''
    # 该字段在表格中的列号(从0计)
    columnSeq = 0
    # 如果该字段不是集合类型,直接依次存储该字段下的所有行的数据,否则存储每行定义的该集合数据是否有效
    data  = []
    # 如果该字段为tableString型,存储解析之后的格式定义 TableStringFormatDefine
    tableStringFormatDefine:TableStringFormatDefine
    # 如果该字段是array或dict类型,其下属的字段信息存放在该变量中
    childField = []
